﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;
using WindowsFormsApplication7.cl.uchile.dcc.supernova;

namespace WindowsFormsApplication7
{
    public partial class formArchivos : Form
    {
        //variables para la foto
        private string imageDirectory;
        private System.Drawing.Image myImg;
        private string localPath;
        int zoomFoto;

        //Emergencia actual
        private string emergActual;

        public formArchivos(int correlativo, string filePath)
        {
            this.imageDirectory = "images";
            zoomFoto = 1;
            this.localPath = filePath + "\\" + this.imageDirectory + "\\";
            this.emergActual = correlativo.ToString();
            InitializeComponent();
        }


        //modulo para descargar un archivo de la Central de Alarmas
        private void buDownload_Click(object sender, EventArgs e)
        {
            //listar archivos
            ListarArchivos();

            //Refrescar imagen
            RefrescarImagen();
            //descargar archivo
            //verificar que se selecciono un item
/*            if (this.listBox1.SelectedIndex != -1)
            {
                //descargar archivo

                string fileName = this.listBox1.Items[this.listBox1.SelectedIndex].ToString();
                Cursor.Current = Cursors.WaitCursor;
                //invocar al metodo
                bool ret = DownloadFile(fileName);
                if (ret)
                {
                    MessageBox.Show("el archivo se descargó correctamente");
                    Cursor.Current = Cursors.Default;
                }
                else
                {
                    MessageBox.Show("Error al descargar el archivo");
                    Cursor.Current = Cursors.Default;
                }
            }
            else
            {
                //MessageBox.Show("Debe seleccione un archivo");

            }        
  */
        }


        //---submodulo listar archivos
        private void ListarArchivos()
        {

            try
            {
                listBox1.Items.Clear();

                //invocar al web service que lista los archivos
                WindowsFormsApplication7.cl.uchile.dcc.supernova.Emergencia archivosCentral = new WindowsFormsApplication7.cl.uchile.dcc.supernova.Emergencia();

                string listaFotos;
                try
                {
                    listaFotos = archivosCentral.ListFilesOfEmergency(this.emergActual, this.imageDirectory);
                }
                catch
                {
                    try
                    {
                        listaFotos = archivosCentral.ListFilesOfEmergency(this.emergActual, this.imageDirectory);
                    }
                    catch (Exception err)
                    {
                        listaFotos = "";

                    }

                }

                if (listaFotos.CompareTo("") == 0)
                {
                    MessageBox.Show("no se pudo recuperar las imagenes ... razon desconocida");
                }
                else
                {
                    //agregar al list box, el nombre de los archivos (de string a listbox)
                    int inicio;
                    inicio = 0;
                    int posicionN;
                    while (listaFotos.IndexOf("\n", inicio) != -1)
                    {
                        posicionN = listaFotos.IndexOf("\n", inicio);
                        string archivo = listaFotos.Substring(inicio, posicionN - inicio);
                        listBox1.Items.Add(archivo);
                        inicio = posicionN + 1;

                    }
                    if (listBox1.Items.Count > 0)
                    {
                        listBox1.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }

        }


        //---submodulo refrescar imagen
        private void RefrescarImagen()
        {
            if (listBox1.SelectedIndex != -1)
            {

                string curFile = this.localPath + listBox1.Items[listBox1.SelectedIndex].ToString();

                if (!File.Exists(curFile))
                {//hay que traer del servidor
                    DownloadFile(listBox1.Items[listBox1.SelectedIndex].ToString());
                }

                //tenemos la imagen
                this.myImg = new System.Drawing.Bitmap(curFile);
                //ajustar el tamano de la imagen
                this.pictureBox1.Width = Convert.ToInt32(myImg.Width * 0.50);
                this.pictureBox1.Height = Convert.ToInt32(myImg.Height * 0.50);
                this.zoomFoto = 1;
                this.buZoomMas.Enabled = true;
                this.buZoomMenos.Enabled = true;
                //this.pictureBox1.Width = this.tabArchivos.Width-60;
                this.pictureBox1.Image = myImg;
                //pictureBox1.ImageLocation = curFile;
                pictureBox1.Refresh();

            }
            else
            {//mensaje 

                MessageBox.Show("No hay archivos...");
            }
        }


        //---sub modulo para descargar un archivo
        private bool DownloadFile(string archivo)
        {

            byte[] arch;
            try
            {
                //invocar al webservice para descargar el archivo
                WindowsFormsApplication7.cl.uchile.dcc.supernova.Emergencia cli = new WindowsFormsApplication7.cl.uchile.dcc.supernova.Emergencia();
                try
                {
                    arch = cli.DownloadFile(archivo, this.imageDirectory);
                }
                catch
                {
                    try
                    {
                        arch = cli.DownloadFile(archivo, this.imageDirectory);
                    }
                    catch (Exception err)
                    {
                        MessageBox.Show(err.Message);
                        arch = null;
                        return false;

                    }
                }

                if (arch != null)
                {
                    //escribir los bytes en el archivo
                    string folderPath = this.localPath;
                    FileStream fs = new FileStream(folderPath + "\\" + archivo, FileMode.Create);
                    fs.Write(arch, 0, arch.Length);
                    fs.Close();
                    Cursor.Current = Cursors.Default;
                }
                return true;


            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
                return false;
            }
        }

        private void buZoomMenos_Click(object sender, EventArgs e)
        {
            if (zoomFoto > 1)
            {
                this.pictureBox1.Width = Convert.ToInt32(pictureBox1.Width - myImg.Width * 0.25);
                this.pictureBox1.Height = Convert.ToInt32(pictureBox1.Height - myImg.Height * 0.25);
                zoomFoto--;
                buZoomMenos.Enabled = true;
                buZoomMas.Enabled = true;
            }
            else
            {
                buZoomMenos.Enabled = false;
            }

        }

        private void buZoomMas_Click(object sender, EventArgs e)
        {
            if (zoomFoto < 4)
            {
                this.pictureBox1.Width = Convert.ToInt32(pictureBox1.Width + myImg.Width * 0.25);
                this.pictureBox1.Height = Convert.ToInt32(pictureBox1.Height + myImg.Height * 0.25);


                //pictureBox1.Width = pictureBox1.Width + 50;
                //pictureBox1.Height = pictureBox1.Height + 50;
                zoomFoto++;
                //trackBar1.Value++;
                buZoomMas.Enabled = true;
                buZoomMenos.Enabled = true;
            }
            else
            {
                buZoomMas.Enabled = false;
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            RefrescarImagen();
        }

    }
}
